package com.pokermind.repository.dao;

import com.pokermind.model.po.PokerHandAction;

import java.util.List;

/**
 * PokerHandAction DAO接口
 * 定义手牌行动相关的数据访问操作
 * 
 * @author PokerMind Team
 */
public interface PokerHandActionDao extends BaseDao<PokerHandAction, Long> {
    
    /**
     * 根据手牌ID查找所有行动
     * @param handId 手牌ID
     * @return 行动列表，按全局序列排序
     */
    List<PokerHandAction> findByHandId(Long handId);
    
    /**
     * 根据手牌ID和街道查找行动
     * @param handId 手牌ID
     * @param street 街道
     * @return 行动列表，按行动序列排序
     */
    List<PokerHandAction> findByHandIdAndStreet(Long handId, String street);
    
    /**
     * 根据手牌ID和座位号查找行动
     * @param handId 手牌ID
     * @param seatNumber 座位号
     * @return 行动列表，按全局序列排序
     */
    List<PokerHandAction> findByHandIdAndSeatNumber(Long handId, Integer seatNumber);
    
    /**
     * 获取手牌的最后一个行动
     * @param handId 手牌ID
     * @return 最后一个行动，如果不存在返回null
     */
    PokerHandAction findLastActionByHandId(Long handId);
    
    /**
     * 统计手牌的行动数量
     * @param handId 手牌ID
     * @return 行动总数
     */
    long countByHandId(Long handId);
    
    /**
     * 统计手牌在指定街道的行动数量
     * @param handId 手牌ID
     * @param street 街道
     * @return 该街道的行动数量
     */
    long countByHandIdAndStreet(Long handId, String street);
    
    /**
     * 删除手牌的所有行动
     * @param handId 手牌ID
     * @return 删除的行数
     */
    int deleteByHandId(Long handId);
}